package com.sigmatrix.h5.dao.impl;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;

import com.sigmatrix.h5.dao.FirstLevelQrCodeDao;
import com.sigmatrix.h5.entity.FirstLevelQRCode;
import com.sigmatrix.h5.exception.DaoException;
import com.sigmatrix.sc.mongo.common.dao.MongoDaoImpl;
/**
 * 
 *@ClassName: FirsLevelQrCodeDaoImpl
 *@Description: 一级码表
 *@author MH
 *@date 2017年9月22日 上午9:47:57
 */
@Repository(value="firstLevelQRCodeDao")
public class FirsLevelQrCodeDaoImpl extends MongoDaoImpl<FirstLevelQRCode> implements FirstLevelQrCodeDao{
	
	/**注入mongoTemplate*/
	@Autowired
	private transient MongoTemplate mongoTemplate;

	/**(non-Javadoc)
	 *@Title: findFirstLevelQRCodeByQRCode
	 *@Description: 
	 *@see com.sigmatrix.sc.handheld.inter.dao.FirstLevelQRCodeDao#findFirstLevelQRCodeByQRCode(java.lang.String, java.lang.String)
	 *@author youjun
	 *@date 2017年7月3日 下午5:25:56
	 */
	@Override
	public FirstLevelQRCode findFirstLevelQRCodeByQRCode(final String enterpriseCode, final String qRCode) throws DaoException {

		if(StringUtils.isBlank(enterpriseCode)
				||StringUtils.isBlank(qRCode)) {
			throw new DaoException("参数有误");
		}
		final Query query = new Query();
	    query.addCriteria(Criteria.where("enterpriseCode").is(enterpriseCode));
	    query.addCriteria(Criteria.where("qrCode").is(qRCode));
	    return mongoTemplate.findOne(query, FirstLevelQRCode.class);
	}

	/**(non-Javadoc)
	 * @throws DaoException 
	 *@Title: findFirstLevelQRCodeByFriendlyCode
	 *@Description: 
	 *@see com.sigmatrix.sc.handheld.inter.dao.FirstLevelQRCodeDao#findFirstLevelQRCodeByFriendlyCode(java.lang.String, java.lang.String)
	 *@author youjun
	 *@date 2017年8月8日 下午3:05:18
	 */
	@Override
	public FirstLevelQRCode findFirstLevelQRCodeByFriendlyCode(final String enterpriseCode, final String friendlyCode) throws DaoException {

		if(StringUtils.isBlank(enterpriseCode)
				||StringUtils.isBlank(friendlyCode)) {
			throw new DaoException("参数有误");
		}
		final Query query = new Query();
	    query.addCriteria(Criteria.where("enterpriseCode").is(enterpriseCode));
	    query.addCriteria(Criteria.where("friendlyCode").is(friendlyCode));
	    return mongoTemplate.findOne(query, FirstLevelQRCode.class);
	}

	/**(non-Javadoc)
	 * @throws DaoException 
	 *@Title: findFirstLevelQRCodeBySeqNum
	 *@Description: 
	 *@see com.sigmatrix.sc.handheld.inter.dao.FirstLevelQRCodeDao#findFirstLevelQRCodeBySeqNum(java.lang.String, java.lang.String)
	 *@author youjun
	 *@date 2017年8月10日 下午8:20:53
	 */
	@Override
	public FirstLevelQRCode findFirstLevelQRCodeBySeqNum(final String enterpriseCode, final String seqNum) throws DaoException {

		if(StringUtils.isBlank(enterpriseCode)
				||StringUtils.isBlank(seqNum)) {
			throw new DaoException("参数有误");
		}
		final Query query = new Query();
	    query.addCriteria(Criteria.where("enterpriseCode").is(enterpriseCode));
	    query.addCriteria(Criteria.where("seqNum").is(seqNum));
	    return mongoTemplate.findOne(query, FirstLevelQRCode.class);
	}

	/**(non-Javadoc)
	 *@Title: update
	 *@Description: 
	 *@see com.sigmatrix.sc.handheld.inter.dao.FirstLevelQRCodeDao#update(com.sigmatrix.sc.handheld.inter.entity.FirstLevelQRCode)
	 *@author youjun
	 *@date 2017年8月14日 上午11:02:07
	 */
	@Override
	public void update(final FirstLevelQRCode item) throws DaoException {

		if(item==null
				||StringUtils.isBlank(item.getQrCode())) {
			throw new DaoException("更新单品码参数有误");
		}
		final Query query=new Query(Criteria.where("qrCode").is(item.getQrCode()));
        final Update update = new Update();
        if(item.getStatus()!=null){
        	update.set("status", item.getStatus());
        }
        //更新查询返回结果集的第一条
        mongoTemplate.updateFirst(query, update, FirstLevelQRCode.class);
        //更新查询返回结果集的所有
        // mongoTemplate.updateMulti(query,update,UserEntity.class);
	}

	/**(non-Javadoc)
	 *@Title: batchSplitParentCode
	 *@Description: 
	 *@see com.sigmatrix.sc.handheld.inter.dao.FirstLevelQRCodeDao#batchSplitOrFillParentCode(java.lang.String, java.util.List, java.lang.String)
	 *@author youjun
	 *@date 2017年8月19日 上午11:38:49
	 */
	@Override
	public void batchSplitOrFillParentCode(final String enterpriseCode, final List<String> operateCodeList, final String parentCode) throws DaoException {

		if(StringUtils.isBlank(enterpriseCode)
				||CollectionUtils.isEmpty(operateCodeList)) {
			throw new DaoException("批量拆除一组多级码的上级码关系参数错误");
		}
		final Query query=new Query(Criteria.where("qrCode").in(operateCodeList));
		query.addCriteria(Criteria.where("enterpriseCode").is(enterpriseCode));
        final Update update = new Update();
        update.set("parentCode", parentCode); // 将上级码更为parentCode
        //更新查询返回结果集的第一条
        mongoTemplate.updateMulti(query, update, FirstLevelQRCode.class);
	}

	/**(non-Javadoc)
	 *@Title: findFirstLevelQRCodeListByCondition
	 *@Description: 
	 *@see com.sigmatrix.sc.handheld.inter.dao.FirstLevelQRCodeDao#findFirstLevelQRCodeListByCondition(com.sigmatrix.sc.handheld.inter.entity.FirstLevelQRCode)
	 *@author youjun
	 *@date 2017年8月21日 下午1:47:13
	 */
	@Override
	public List<FirstLevelQRCode> findFirstLevelQRCodeListByCondition(final FirstLevelQRCode firstLevelQRCode) throws DaoException {

		if(firstLevelQRCode==null) {
			throw new DaoException("参数有误");
		}
		final Query query = new Query();
		if(StringUtils.isNotBlank(firstLevelQRCode.getEnterpriseCode())) {
			query.addCriteria(Criteria.where("enterpriseCode").is(firstLevelQRCode.getEnterpriseCode()));
		}
		if(StringUtils.isNotBlank(firstLevelQRCode.getParentCode())) {
			query.addCriteria(Criteria.where("parentCode").is(firstLevelQRCode.getParentCode()));
		}
		return mongoTemplate.find(query, FirstLevelQRCode.class);
	}

	/**(non-Javadoc)
	 *@Title: batchUpdateByQrCodeList
	 *@Description: 
	 *@see com.sigmatrix.sc.handheld.inter.dao.FirstLevelQRCodeDao#batchUpdateByQrCodeList(com.sigmatrix.sc.handheld.inter.entity.FirstLevelQRCode, java.util.List)
	 *@author youjun
	 *@date 2017年8月22日 下午3:52:28
	 */
	@Override
	public void batchUpdateByQrCodeList(FirstLevelQRCode updateFirstCode, List<String> qrCodeList)
			throws DaoException {

		if(updateFirstCode==null
				||StringUtils.isBlank(updateFirstCode.getEnterpriseCode())
				||CollectionUtils.isEmpty(qrCodeList)) {
			throw new DaoException("批量更新一组一级码的参数错误");
		}
		final Query query=new Query(Criteria.where("qrCode").in(qrCodeList));
        final Update update = new Update();
        if(updateFirstCode.getStatus()!=null){
        	update.set("status", updateFirstCode.getStatus());
        }
        if(updateFirstCode.getParentCode()!=null) {
        	update.set("parentCode", updateFirstCode.getParentCode());
        }
        //更新查询返回结果集的所有
        mongoTemplate.updateMulti(query, update, FirstLevelQRCode.class);
	}

	
}
